﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Windows.Forms;

namespace JudoTec.cls
{
    public class Participante
    {
        string dni;
        string nombre;
        string apellidos;
        int edad;
        double peso;
        string sexo; // V --> Varon || M --> Mujer
        string club;
        bool activo;

        // METODOS CONSTRUCTORES
        public Participante()
        {
            this.dni = "";
            this.nombre = "";
            this.apellidos = "";
            this.edad = 0;
            this.peso = 0;
            this.sexo = "";
            this.club = "";
            this.activo=false;
        }

        public Participante(string dni,
                            string nombre,
                            string apellidos,
                            int edad,
                            double peso,
                            string sexo,
                            string club,
                            bool activo)
        {
            this.dni = dni;
            this.nombre = nombre;
            this.apellidos = apellidos;
            this.edad = edad;
            this.peso = peso;
            this.sexo = sexo;
            this.club = club;
            this.activo = activo;
        }

        // Metodo que me inserta un participante en la BD
        public void InsertarParticipante()
        {
            try
            {
                string consulta = "INSERT INTO participantes (DNI_Participante, Nombre, Apellidos, Edad, Peso, Sexo, Club, Activo) " +
                                  "VALUES (@dni, @nombre, @apellidos, @edad, @peso, @sexo, @club, @activo)";

                InsertarModificarParticipante(consulta);

                MessageBox.Show("Usuario Añadido con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (MySqlException)
            {
                MessageBox.Show("Ocurrio un error al añadir el usuario", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }

        // Metodo que me modifica un participante en la BD
        public void ModificarParticipante()
        {
            try
            {
                string consulta = "UPDATE participantes SET dni= @dni, nombre= @nombre, apellidos= @apellidos, edad= @edad," +
                           "peso= @peso, sexo= @sexo, club= @club, activo= @activo WHERE DNI_Participante=" + this.dni;

                InsertarModificarParticipante(consulta);
                MessageBox.Show("Usuario Modificado con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (MySqlException)
            {
                MessageBox.Show("Ocurrio un error al Modificar el usuario", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }

        //Metodo que ejecuta la accion de insertar o modificar en la BD
        private void InsertarModificarParticipante(string consulta)
        {

            MySqlConnection conexion = cls.ConexionMySQL.IniciarConexion();
            MySqlCommand comando = new MySqlCommand(consulta, conexion);

            //Asigno los parametros
            comando.Parameters.AddWithValue("@dni", this.dni);
            comando.Parameters.AddWithValue("@nombre", this.nombre);
            comando.Parameters.AddWithValue("@apellidos", this.apellidos);
            comando.Parameters.AddWithValue("@edad", this.edad);
            comando.Parameters.AddWithValue("@peso", this.peso);
            comando.Parameters.AddWithValue("@sexo", this.sexo);
            comando.Parameters.AddWithValue("@club", this.club);
            comando.Parameters.AddWithValue("@activo", this.activo);

            comando.ExecuteNonQuery();
            
            conexion.Close();
        }
        
        // Metodo que me elimina a un participante de la BD
        public void EliminarParticipante()
        {
            try{
                string consulta = "DELETE FROM participantes WHERE DNI_Participante=" + this.dni;
            
                MySqlConnection conexion = cls.ConexionMySQL.IniciarConexion();
                MySqlCommand comando = new MySqlCommand(consulta, conexion);

                comando.ExecuteNonQuery();
                conexion.Close();

                MessageBox.Show("Usuario Eliminado con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (MySqlException)
            {
                MessageBox.Show("Ocurrio un error al Eliminar el usuario", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }


        // METODOS PARA GET Y SET
        public string Dni
        {
            get { return dni; }
            set { dni = value; }
        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }


        public string Apellidos
        {
            get { return apellidos; }
            set { apellidos = value; }
        }

        public int Edad
        {
            get { return edad; }
            set { edad = value; }
        }

        public double Peso
        {
            get { return peso; }
            set { peso = value; }
        }

        public string Sexo
        {
            get { return sexo; }
            set { sexo = value; }
        }

        public string Club
        {
            get { return club; }
            set { club = value; }
        }

        public bool Activo
        {
            get { return activo; }
            set { activo = value; }
        }

        //Sobrecargamos equals
        public override bool Equals(object obj)
        {
            //Si el parametro es nulo devuelvo false
            if (obj == null)
            {
                return false;
            }
            //Si al hacerle un cast da nulo devuelvo false
            Participante u = obj as Participante;
            if (u == null)
            {
                return false;
            }

            //Si todos los campos son igual devuelvo true
            if (this.Dni == u.Dni)
            {
                return true;
            }
            return false;
        }
    }
}
